$(document).ready(init);
var oTable;
var notificationSelected;
var successful = "successful";
var imageName = "";

window.onunload = function(){
	parent.location.hash = '';
}
/**
 * Establece la configuración inicial de 
 * la página
 */
function init(){
	//se agrega el evento click a los botones
    $("#searchButton").click(function() { 
        searchNotifications();
    });
    
    $("#buttonCancelSend").click(function() { 
        hideDiv('divSendNotification');
    });
    
    $("#sendNot").click(function() { 
        sendNotificationAndroid();
    });
    
    //se consultan las ciudades
    listCities();
    
    //se inicializa el uploader de imágenes
    $(function() {
        $('#file_upload').uploadify({

            'buttonText' : 'Seleccionar',
            'checkExisting' : '../scripts/check-exists.php',
            'fileTypeDesc' : 'Archivos de imagen...',
            'fileTypeExts' : '*.gif; *.jpg; *.png',
            'height'   : 30,
            'width'    : 100,
            'auto'     : true,
            'multi'    : false,
            'queueSizeLimit' : 1,
            'swf'      : '../scripts/uploadify.swf',
            'uploader' : '../scripts/uploadify.php',
            'onUploadComplete' : function(file,data) {
                imageName = file.name;
            }
        }); 
    });
}

/**
 * Oculta un div
 * @param divName : id del div que se desea ocultar
 */
function hideDiv(divName){
    $('#'+divName).fadeOut(500);
}

/**
 * Muestra un div
 * @param divName : id del div que se desea mostrar
 * @returns
 */
function showDiv(divName){
    $('#'+divName).fadeIn(500);
}

/**
 * Valida si se ingresaron todos los datos
 * para crear o modificar una notificación
 * @returns true si ingresó todos los datos y
 * 			false en caso contrario
 */
function validateNotificationData(){
    if($('#notificationNameData').val() == "" || $('#notificationPlaceData').val()==""
        || $('#notificationDateData').val()=="" || $('#notificationHourData').val()==""){
        return false;
    }
    return true;
}

/**
 * Limpia los campos para crear o modificar
 * una notificación
 */
function cleanFieldsNotificationData(){
	imageName = "";
    $('#notificationNameData').val("");
    $('#notificationPlaceData').val("");
    $('#notificationDateData').val("");
    $('#notificationHourData').val("");
}

/**
 * Se agregan los oyentes para las columnas
 * de modificar, eliminar y enviar en la 
 * tabla de notificaciones
 */
function addListenerRows(){
	//Se agrega el evento click para la columna enviar
	//de la tabla de notificaciones
    $('#tableNotifications tbody td:nth-child(7)').click( function () {
        oTable = $('#tableNotifications').dataTable();
        //se obtiene la posición actual
        var aPos = oTable.fnGetPosition( this );

        //se obtiene las columnas de la fila actual
        var aData = oTable.fnGetData( aPos[0] );
        
        //se almacena la notificación seleccionada
        notificationSelected = [aData[1],aData[2]];
        $('#notificationNameSend').html(notificationSelected[1]);
        showDiv('divSendNotification');
    } );
    
    //se agrega el evento click para la columna 
    //eliminar de la tabla de notificaciones
    $('#tableNotifications tbody td:nth-child(6)').click( function () {
        oTable = $('#tableNotifications').dataTable();
        var aPos = oTable.fnGetPosition( this );
        var aData = oTable.fnGetData( aPos[0] );

        notificationSelected = [aData[1],aData[2]];
        
        if (confirm ("Se eliminará la notificación '"+notificationSelected[1]
        	+"'. Seleccione Aceptar para confirmar.")){
        	removeNotificacion();
        }else{
        	return;
        }
        
    } );
    
    $('#tableNotifications tbody td:nth-child(5)').click( function () {
        oTable = $('#tableNotifications').dataTable();
        var aPos = oTable.fnGetPosition( this );
        var aData = oTable.fnGetData( aPos[0] );

        notificationSelected = [aData[1],aData[2]];
        initModifyNotification();
    } );
}

/**
 * Lista las ciudades de la base de datos
 */
function listCities(){
    
    var citiesList = '<div class="field">'+
                     '<span class="name">Ciudad</span>'+   
                     '<select name="cities" class="value select" id="cities">';
    $.ajax({
        type: "POST",
        url:"../functions/listCities.php",
        async: true,
        success: function(datos){
            var dataJson = eval(datos);
            
            for(var i in dataJson){
            	if(i==1){
            		citiesList +=                     
                        '<option name="'+dataJson[i].id+'" value="'+dataJson[i].id+'" selected>'
                        +dataJson[i].nombre+'</option>';
            	}else{
            		citiesList +=                     
                        '<option name="'+dataJson[i].id+'" value="'+dataJson[i].id+'">'
                        +dataJson[i].nombre+'</option>';
            	}
            }
            citiesList += '</select></div>';
            $('#divCities').html(citiesList);
        },
        error: function (obj, error, objError){
            alert("ocurrio un error en la consulta");
        }
    });
}

/**
 * Consulta las notificaciones según los filtros
 * ingresados
 * @returns termina la ejecución del método
 */
function searchNotifications(){
   
   if($('#filtername').val() == "" && $('#filterstate').val()=="0"
        && $('#filterdateinitial').val()=="" && $('#filterdatefinal').val()==""){
        alert("Debe ingresar algún filtro de búsqueda.");
        $('#filtername').focus();       // Esta función coloca el foco de escritura del usuario en el campo Nombre directamente.
        return;
    }
    var notificationDiv = '<table id="tableNotifications" cellpadding="0" cellspacing="0" border="0" class="table"><thead>'+
                          
                          '<tr class="tableHeader">'+
                            '<td>Fecha</td>'+
                            '<td>ID</td>'+
                            '<td>Nombre</td>'+
                            '<td>Estado</td>'+
                            '<td colspan="3">Acciones</td>'+
                          '</tr></thead><tbody>';
    $.ajax({
        type: "POST",
        url:"../functions/searchNotifications.php",
        data: {
            name:$('#filtername').val(), 
            state:$('#filterstate').val(),
            dateinitial:$('#filterdateinitial').val(),
            datefinal:$('#filterdatefinal').val()
        } , 
        async: true,
        success: function(datos){
            var dataJson = eval(datos);
            
            if(dataJson.length === 0){
                $("#divNotifications").css({'display':'none'});
                alert("La búsqueda no arrojó resultados con los filtros ingresados");
                return;
            } 
            for(var i in dataJson){
                notificationDiv += 
                    '<tr>'+
                        '<td class="columnState">'+dataJson[i].date+'</td>'+
                        '<td class="columnState">'+dataJson[i].id+'</td>'+
                        '<td class="columnName">'+dataJson[i].name+'</td>'+
                        '<td class="columnState">'+dataJson[i].state+'</td>'+
                        '<td class="columnActions"><a href="#" onclick="">Modificar</a></td>'+
                        '<td class="columnActions"><a href="#" onclick="">Eliminar</a></td>';
                    if(dataJson[i].state == 'enviada'){
                        notificationDiv += '<td class="columnActions">'+
                            '<a href="#">Reenviar</a></td></tr>';
                    }else{
                        notificationDiv += '<td class="columnActions">'+
                            '<a href="#">Enviar</a></td></tr>';
                    }
            }
            notificationDiv +=  '</tbody></table>';
            $('#notifications').html(notificationDiv);
            
            oTable =$('#tableNotifications').dataTable({
                "bPaginate": true,
                "bLengthChange": true,
                "bFilter": true,
                "bSort": true,
                "bInfo": true,
                "bAutoWidth": false,
                "aoColumns": [
                    { sWidth: '100px' },
                    { sWidth: '50px' },
                    { sWidth: '350px' },
                    { sWidth: '100px' },
                    { sWidth: '100px' },
                    { sWidth: '100px' },
                    { sWidth: '100px' }
                ],
                "oLanguage": { 
                "aaSorting": [[2, 'asc']],
                "oPaginate": {
                "sPrevious": "Anterior",
                "sNext": "Siguiente",
                "sLast": "Ultima",
                "sFirst": "Primera"
                }
                }
            });
            addListenerRows();
            $("#divNotifications").css({'display':'block'});
             
        },
        error: function (obj, error, objError){
            alert("Ocurrio un error en la consulta");
        }
    });
}

/**
 * Prepara la pantalla para crear 
 * una notificación.
 */
function initCreateNotification(){
	$('#buttonCreate').css('display','inline');
    $('#buttonModify').css('display','none');
    $('#titleDivCreateModifyNotification').html("Crear Notificación");
    showDiv('divNotificationData');
}
/**
 * Valida los datos de la notificación y hace
 * el llamado para ingresarla a la base de datos
 */
function createNotification(){
    
    if(validateNotificationData()){
        if(imageName == ""){
        	alert("Debe seleccionar una imagen");
        }else{
            $('#file_upload').uploadify('upload');
            insertNotification(imageName)
        }
    }else{
        alert("Todos los campos son requeridos");
        return false;
    }
    return true;
}
/**
 * Inserta una notificación a la base de datos
 * @param imageName : nombre de la imagen de
 * 		la notificación que ha sido subida al servidor
 */
function insertNotification(imageName){
    $.ajax({
        type: "POST",
        url:"../functions/insertNotification.php",
         data: {
            name:$('#notificationNameData').val(), 
            place:$('#notificationPlaceData').val(),
            date:$('#notificationDateData').val(),
            hour:$('#notificationHourData').val(),
            urlImage:imageName
        } , 
        async: false,
        success: function(response){
        	 if(response == successful){
        		 alert("Se creó la notificación satisfactoriamente");
                 hideDiv('divNotificationData');
                 cleanFieldsNotificationData();
        	 }else{
        		 alert("Ocurrió un error al intentar crear la notificación");
        	 }
           
        },
        error: function (obj, error, objError){
        	alert("Ocurrió un error al intentar crear la notificación");
        }
    });
}

/**
 * Inicializa la pantalla de modificar
 * una notificación
 * @returns
 */
function initModifyNotification(){
	if(notificationSelected[0] == ''){
		alert("No ha seleccionado una notificación");
	}else{
		$.ajax({
	        type: "POST",
	        url:"../functions/searchNotification.php",
	        data: {
	            notificationId:notificationSelected[0]
	        } , 
	        async: false,
	        success: function(datos){
	            var dataJson = eval(datos);
	            
	            if(dataJson.length === 0){
	                $("#divNotifications").css({'display':'none'});
	                alert("No se encontró la notificación seleccionada");
	                return;
	            } 
	            for(var i in dataJson){
	                $('#notificationNameData').val(dataJson[i].name);
	                $('#notificationPlaceData').val(dataJson[i].place);
	                $('#notificationDateData').val(dataJson[i].date);
	                $('#notificationHourData').val(dataJson[i].hour);
	            }
	            $('#buttonCreate').css('display','none');
	            $('#buttonModify').css('display','inline');
	            $('#titleDivCreateModifyNotification').html("Modificar Notificación");
	            showDiv('divNotificationData');
	        }      
        });
	}
}

/**
 * Modifica una notificación en la base
 * de datos
 */
function modifyNotification(){
	if(validateNotificationData()){
		if(notificationSelected[0] == ""){
			alert("No ha seleccionado una notificación");
		}
		 $.ajax({
		        type: "POST",
		        url:"../functions/updateNotification.php",
		         data: {
		        	notificationId:notificationSelected[0], 
		            name:$('#notificationNameData').val(), 
		            place:$('#notificationPlaceData').val(),
		            date:$('#notificationDateData').val(),
		            hour:$('#notificationHourData').val(),
		            urlImage:imageName
		        } , 
		        async: false,
		        success: function(response){
		            if(response == successful){
		            	alert("Se actualizó la notificación satisfactoriamente");
			            hideDiv('divNotificationData');
			            searchNotifications();
			            cleanFieldsNotificationData();
		            }else{
		            	alert("Ocurrió un error intentando actualizar la notificación");
		            }
		        	
		        },
		        error: function (obj, error, objError){
		        	alert("Ocurrió un error intentando actualizar la notificación");
		        }
		    });
	}
}

/**
 * Elimina una notificación de la
 * base de datos
 */
function removeNotificacion(){
	if(notificationSelected[0] == ""){
		alert("Debe seleccionar una notificación");
	}else{
		$.ajax({
	        type: "POST",
	        url:"../functions/removeNotification.php",
	        async: false,
	        data: {
	            notificationId:notificationSelected[0] 
	        },
	        success: function(response){
	            if(response == successful){
	            	alert("La notificación se ha eliminado satisfactoriamente");
	            	searchNotifications();
	            }else{
	            	alert("Ocurrió un error al intentar eliminar la notificación");
	            }
	        },
	        error: function (obj, error, objError){
	        	alert("Ocurrió un error al intentar eliminar la notificación");
	        }
	    });
	}
}

/**
 * Envía una notificación a una
 * determinada ciudad
 */
function sendNotification(){
	if(notificationSelected[0] == "" || $('#cities').val()==""){
		alert("Debe seleccionar una notificación y una ciudad");
	}else{
		
		$.ajax({
	        type: "POST",
	        url:"../functions/sendNotification.php",
	        async: false,
	        data: {
	            notificationId:notificationSelected[0], 
	            cityId:$('#cities').val(),
	            date: $.datepicker.formatDate('yy-mm-dd', new Date())
	        },
	        success: function(datos){
	            if(datos == successful){
	            	Parse.initialize("VBlypp7A4E0nAX4FMk9Cip7uqU4Ib38irNCRqIXX"
	        				, "8cL2XU0fCmSRt5VgaJDDPnWPZQtw4QtRtNFLK8a8");
	        		
	        		Parse.Push.send({
	        			  channels: [ "ciudad" + $('#cities').val() ],
	        			  data: {
	        			    alert: "Hay nuevos eventos en tu ciudad."
	        			  }
	        			}, {
	        			  success: function() {
	        				  alert("Se envió la notificación satisfactoriamente");
	        	            	hideDiv('divSendNotification');
	        	            	searchNotifications();
	        			  },
	        			  error: function(error) {
	        			    alert ("Error enviando notificación");
	        			  }
	        			});
	            }else{
	            	alert("Ocurrió un error al intentar enviar la notificación");
	            }
	        },
	        error: function (obj, error, objError){
	            alert("ocurrio un error en la consulta");
	        }
	    });
	}
}

